<?php
/**
 * Authorization
 *
 * класс Authorization позволяет пользователю Авторизироваться и Регистрироваться
 */
class Authorization{
  private $country = '';
  private $city = '';
  private $eMail = '';
  private $firstName = '';
  private $lastName = '';
  private $pass = '';
  private $pass2 = '';
  private $birthYear = '';
  private $birthMonth = '';
  private $birthDay = '';
  private $familyStatus = '';
  private $sex = '';
  
/*  private $timeZone = 3;
  private $invite = '';
  private $login = '';
  
  private $icq = '';
  private $phone = '';
  private $phoneDisplay = false;
  private $aboutMyself = '';
  private $reference = '';*/
  
  /**
	 * Эта функциия вызывается в User_session для проверки, существует ли пользователь с таким мылом и паролем
	 * Вовращает ИД пользователя если было совпадение...
	 *
	 * @param string $mail
	 * @param int $md5password
	 * @return int - id юзера
	 */
	static public function logIn($mail, $md5password ){
		$objDB = Service_Database::instance();
		  $stmt = "SELECT `ID_user` FROM `user` WHERE `password` = '" . $md5password . "' AND `eMail` = '" . $mail . "'";

		return $objDB->selectSimpleField($stmt);
	}		
	/**
	 * Получает Пароль пользователя по его е-майлу
	 *
	 * @param string $Mail
	 * @return string - пароль пользователя
	 */
	public static function getUserPassByMail($Mail){
		$objDb = Service_Database::instance();
		$qwerty = 'SELECT `user`.`pass` FROM `user` WHERE eMail=\'' . $Mail .'\'';
		return  $objDb->selectSimpleField($qwerty);;
	}
	/**
	 * Функция для подтверждение мыла. Меняет значение submit на 1
	 *
	 * @param int $id_user
	 */
	public static function submitMailRegistration($id_user)
	{
		$objDb = Service_Database::instance();
		$stmt = 'UPDATE `user` 
       		  SET `user`.`submit`= 1
				    WHERE `user`.`ID_user` = '.$id_user.'';
    $objDb->query($stmt);
	}	
  /**
   * Метод проверяет, существует ли уже в БД такой e-mail
   *
   * @param string $strEMail
   * @return bool
   */
  public static function isEMailExist($strEMail){
    $objDB = Service_Database::instance();//Получаем подключение к БД
    $stmt = "SELECT `ID_user` FROM " . TABLE_USER . " WHERE `eMail` = '" . $strEMail . "'";  //формируем SQL-запрос
    return (sizeof($objDB->selectOne($stmt)) > 0) ? true : false;  //Осуществляем SQL-запрос
  }  
  /**
   * Метод проверяет, корректно ли введен адрес электроноой почты
   *
   * @param string $strEMail - e-mail
   * @return bool 
   */
  public static function isEMailCorrect($strEMail){
    return preg_match("/^[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?\.[A-Za-z0-9]{2,6}$/", $strEMail);
  }
  /**
   * Метод задает e-mail
   *
   * @param string $eMail
   */
  public function setEMAil($eMail){
    $this->eMail = $eMail;
  }
  /**
   * Метод задает имя
   *
   * @param string $firstName
   */  
  public function setFirstName($firstName){
    $this->firstName = $firstName;
  }
  /**
   * Метод задает фамилию
   *
   * @param string $lastName
   */  
  public function setLastName($lastName){
    $this->lastName = $lastName;
  }
  /**
   * Метод задает пароль
   *
   * @param string $pass
   */  
  public function setPass($pass){
    $this->pass = $pass;
  }
  /**
   * Метод задает подтверждение пароля
   *
   * @param string $pass2
   */  
  public function setPass2($pass2){
    $this->pass2 = $pass2;
  }  
  /**
   * Метод задает часовой пояс
   *
   * @param string $timeZone
   */  
  public function setTimeZone($timeZone){
    $this->timeZone = $timeZone;
  }
  /**
   * Метод задает город
   *
   * @param string $city
   */  
  public function setCity($city){
    $this->city = $city;
  }
  /**
   * Метод задает страну
   *
   * @param string $country
   */  
  public function setCountry($country){
    $this->country = $country;
  }
    /**
   * Метод задает дату рождения
   *
   * @param string $birthYear - год
   */  
  public function setDate($birthYear, $birthMonth, $birthDay){
    $this->birthYear = $birthYear;
    $this->birthMonth = $birthMonth;
    $this->birthDay = $birthDay;
  }
  /**
   * Метод задает семейный статус
   *
   * @param string $familyStatus
   */  
  public function setFamilyStatus($familyStatus){
    $this->familyStatus = $familyStatus;
  }
    /**
   * Метод задает пол
   *
   * @param string $sex
   */  
  public function setSex($sex){
    $this->sex = $sex;
  }
  /**
	 * Метод регистрации пользователя в системе
	 *
	 * @return integer - идентификатор свежезарегистрированного пользователя
	 */
	public function regist(){
		$this->checkRegist();
	  $objDb = Service_Database::instance();
	  $stmtFields = '';
	  $stmtValues = '';

	  if($this->firstName != ''){
	    $stmtFields .= '`first_name`, ';
	    $stmtValues .= "'" . $this->firstName . "', ";
	  }
	  if($this->lastName != ''){
	    $stmtFields .= '`last_name`, ';
	    $stmtValues .= "'" . $this->lastName . "', ";
	  }	  
	  if($this->pass != ''){
	    $stmtFields .= '`password`, ';
	    $stmtValues .= "'" . md5($this->pass) . "', ";
	  }
	  if($this->city != ''){
	    $stmtFields .= '`city`, ';
	    $stmtValues .= "'" . $this->city . "', ";
	  }
	  if($this->country > 0){
	    $stmtFields .= '`ID_country`, ';
	    $stmtValues .= "'" . $this->country . "', ";
	  }
	  if($this->familyStatus > 0){
	    $stmtFields .= '`familyStatus`, ';
	    $stmtValues .= "'" . $this->familyStatus . "', ";
	  }
	  if($this->sex != ''){
	    $stmtFields .= '`sex`, ';
	    $stmtValues .= "'" . $this->sex . "', ";
	  }
	  if($this->birthYear > 0 && $this->birthMonth > 0 && $this->birthDay > 0){
	    $stmtFields .= '`birthday`, ';
	    $stmtValues .= "'" . $this->birthYear . '-' . $this->birthMonth . '-' . $this->birthDay . "', ";
	  }

    $stmtFields .= '`eMail`';
	  $stmtValues .= "'" . $this->eMail . "'";

		$stmt = 'INSERT INTO `user` (' . $stmtFields . ')';
		return $objDb->queryInsertAutoincrement($stmt);
	}
	
  /**
	 * метод проверки на валидность данных при регистраци (используеться вместе с try)
	 *
	 * @return boolean
	 */

	public function checkRegist(){	
  	$e = new Exception_Multiline(); //создаем объект для хранения списка исключений
    
  	//Проверка имени
  	if($this->firstName != '')
    	if(strlen($this->firstName) < 3)
    	  $e[] = 'Не заполнено имя (минимум 3 символа)';
  	
    //Проверка фамилии
  	if($this->lastName != '')
  	  if(strlen($this->lastName) < 3)
  	    $e[] = 'Не заполнена фамилия (минимум 3 символа)';
    
    //Проверка электронной почты
    if($this->eMail != '')
  	  if(strlen($this->eMail) < 1)
    	  $e[] = 'Не заполнена эл. почта';
    	else{
      	if(! self::isEMailCorrect($this->eMail))
          $e[] = 'Эл. почта <b> '.$this->eMail.  ' </b>введена неккоректно. Введите эл. почту вида name@mail.ru';	    
        elseif (self::isEMailExist($this->eMail))
          $e[] = 'Пользователь с такой эл. почтой (<b>'. $this->eMail . ' </b>) уже зарегистрирован';
    	}
    	
    //Проверка пароля
    if($this->pass != '')
    	if(strlen($this->pass) < 6)
    	  $e[] = 'Не заполнен пароль (минимум 6 символов)';
    	elseif ($this->pass != $this->pass2)
    	  $e[] = 'Пароль и подтверждение пароля не совпадают';


    if ($e->isErrorExists()) // Если мы зафиксировали какие-то исключения, то выдаем окончательное исключение
      throw $e;
		return true;		
	
	}
}
?>